python3小白课:函数入门
函数的定义和调用
定义一个函数很简单,用到def关键字来定义。我们来看一下语法:
def 函数名([形参们]):
[执行体]
[return [返回值]]
上述语法中的[]表示里面的内容是可选的,可以填可以不填,不是列表的意思。
使用def来声明这是一个函数,接下来写函数的名字,跟变量的命名规则类似,这里就不赘述了,需要注意的是,函数名不要跟一些系统保留关键字、类型名等相同,否则会报错或者覆盖内置的函数,使内置函数在脚本中无法使用。所以函数名尽量有意义一些,根据你的业务场景来命名有意义的,你能理解的命名。
接下来是一个小括号,里面可以设定要传入的参数在执行体中的名字(这样在执行体中可以获取到传入的参数),也可以是一个不需要参数的函数。
函数的内里部分需要缩进(否则不算函数的一部分),这一点需要大家注意一下。
当需要这个函数在调用完成后对外返回内容的时候,可以使用return关键字来进行返回,但它不是必须的。如果没有返回值就不写,如果有返回值就写。可以是什么都不返回,也可以在一个空格之后填写返回值,返回值可以是各种我们之前学习的数据类型。
执行体和return语句不能同时不存在。如果你还没想好这个函数要做什么,可以使用学过的pass占位符占位。
[!danger]
在函数中,一旦碰到return语句函数就会立即结束调用并返回,即时在return语句的后面还有执行的语句也是不会执行的。所以它也可以用于
结束循环结构的循环体。
我们来尝试定义一个十分简单的函数,并且调用它来理解:
# coding:utf-8
def add_1(num):
return num + 1
a = add_1(1)
print(a)
这个例子是定义一个函数,这个函数可以让传入的值加上1之后返回。从这个简单的例子我们还能看到一些小知识点。
比如这是一个没有执行体部分的函数,但计算的逻辑代码写在了return语句的部分,所以return语句是支持表达式的。
形参传入了一个叫做num的变量,它是不允许为空的变量,必须传入值,否则调用函数时会报错。
函数返回之后,可以用变量接收结果进行进一步处理。函数的定义代码在调用之前,调用函数跟我们之前调用系统内置函数似乎区别不大。
同理,定义函数时不设定形参,就是一个不需要传入参数即可直接调用的函数,我们看个例子:
# coding:utf-8
def print_3():
text = "重要的事情说三遍!"
for i in range(3):
print(text)
print_3()
这个函数是重要的事情说三遍的函数实现,今后,你只需要带上这个函数,就可以一条命令调用这个功能了,十分方便。当然,如果你需要实现传入任意的话语都能自动说三遍,你也可以设定一个形参,传入你要说的话。
这个函数没有return语句,也是可以的。具体怎么写,你可以根据你的业务需要,灵活思考变动,举一反三。
函数多个返回值
刚才我们举的小例子都是返回一个返回值或者不返回的。
[!question]
那么同一个函数支持多个返回值吗?
在python中,是支持的。我们直接来看个例子:
# coding:utf-8
def get_fruits():
return "apple", "banana", "orange"
print(get_fruits())
这个例子返回了三种水果的名字字符串,我们注意到在return语句中使用了,分隔,这样就可以返回多个返回值了,返回的返回值会自动组装成一个列表。
[!tip]
你可以使用一个变量接收后使用索引访问,也可以定义多个变量,用序列解包的方式赋值给每个变量。
为函数提供帮助文档
之前的课程中,我们学习过使用help命令来查看函数命令的帮助文档,这些文档是哪儿来的呢?其实这都是这些函数在创建之初,就定义好的供人查询用的。如果开发者懒一点没有定义,那么有可能你是看不到这个文档的。
[!question]
那么你自己编写的函数呢?可以自己定义文档吗?
答案是可以的,而且非常简单。
我们来看个例子。
# coding:utf-8
def get_fruits():
"""
我就是函数的文档,使用多行文本的写作方式就可以,写在函数执行体的前面
这个函数是支持中文的。
因为是多行文本,某一行你也可以选择不缩进,总之怎么方便怎么来。
你可以写任意的内容到文档里面
通常的写法是:
函数作用:获取几种水果的名字
参数:没有参数。如果有多个参数可以分多行写
返回值:没有返回值可以不写
你还可以写一些使用范例等等
写好之后,可以使用help命令来查看你写的效果,如果不喜欢,还可以修改
"""
return "apple", "banana", "orange"
print(get_fruits())
print("*" * 40)
print(help(get_fruits))
print("*" * 40)
# 你还可以使用函数的__doc__属性查看帮助文档,注意前后各有两个_
print(get_fruits.__doc__)
可见,有的时候定义一个函数的文档,内容甚至可能比代码的量还大,当然,如果你不想写那么多,也没有强制要求,你可以不写文档或者只写一两行,一切看你自己。
如果你写的函数文档是怕自己忘了或者给别人看的,还记得我们讲过的注释的好处吗?一个好的帮助文档是可以帮助团队省事的,要写多少,看你咯。
单词释义
| 单词 | 释义 |
|---|---|
| def | define定义这个单词的简写 |
| return | 返回 |
| add | 加,加法 |
| num | number数字的简写 |
| text | 文本 |
| get | 获取 |
| fruits | fruit是水果的意思,这里是复数形式 |
| apple | 苹果 |
| banana | 香蕉 |
| orange | 橙子,柑橘 |
| help | 帮助 |
| doc | document文档这个单词的简写 |